#pragma once
//堆的实现
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <stdbool.h>

typedef int HeapDateType;
typedef struct Heap
{
	HeapDateType* data;
	int size;
	int capacity;
}Heap;

//堆的初始化
void HeapInit(Heap* hp);

//堆的销毁
void HeapDestroy(Heap* hp);

void Swap(HeapDateType* a1, HeapDateType* a2);

//向上调整，使之成为一个堆
void AdjustUp(HeapDateType* a, int child);

//堆的插入
void HeapPush(Heap* hp, HeapDateType x);

//向下调整
void AdjustDown(HeapDateType* a, int parent, int size);

//堆的删除
void HeapPop(Heap* hp);

//堆的数据个数
int GetHeapSize(Heap* hp);

//判空
bool HeapEmpty(Heap* hp);